---
id: unit7
title: 第七章 文件系统
---
## 文件系统的基本概念
**文件**可以被解释为一组带标识的、在逻辑上有完整意义的信息项的序列。

文件名是用户在创建文件时确定的，并在以后访问文件时使用。文件名通常由用户给定，它是一个字母数字串，有些系统规定必须是英文字母大头且允许一些其他的符号出现在文件名的非打头部分。

**文件系统**是操作系统中统一管理信息资源的一种软件。它管理文件的存储、检索、更新，提供安全可靠的共享和保护手段，并且方便用户使用。其功能有：  
（1）统一管理文件的存储空间，实施存储空间的分配与回收。  
（2）实现文件从名字空间到外存地址空间的映射。即实现文件的按名存取，以对用户透明的方式管理名字空间。  
（3）实现文件信息的共享，并提供文件的保护和保密措施。  
（4）向用户提供一个方便使用的接口（提供对文件系统操作命令，以及提供对文件的操作命令：信息存取、加工等）。  
（5）系统维护及向用户提供有关信息。  
（6）保持文件系统的执行效率。文件系统在操作系统接口中占的比例最大，用户使用操作系统的感觉在很大程度上取决于对文件系统的使用效果。  
（7）提供与I／O的统一接口。

**外存储设备的特点：**
在计算机系统中，外存储设备同内存相比较，一般有容量大、断电后仍可保存信息、速度较慢、成本较低等特点。

**文件常用的存取方法有：**顺序存取和随机存取两种方式。

**文件的分类：**  
（1）按文件的用途分类：系统文件、库函数文件、用户文件。  
（2）按文件的组织形式分类：普通文件、目录文件、特殊文件。  
（3）一些常见的文件分类方式：
①按文件的保护方式可划分为：只读文件、读写文件、可执行文件、无保护文件等。
②按信息的流向分类可划分为：输人文件、输出文件和输入输出文件等。
③按文件的存放时限可划分为：临时文件、永久文件和档案文件等。临时文件，即记有临时性信息的文件；永久性文件，即其信息需要长期保存的文件；档案文件，即保存在作
为“档案”用的磁带或光盘等永久性介质上，以备查证和恢复时使用的文件。 
④按文件所使用的介质类型分类可划分为：磁盘文件、磁带文件、卡片文件和打印文件等。   
⑤按文件的组织结构分类。  

（4）UNIX类操作系统中文件的分类：
①普通文件。这是内部无结构的一串平滑的字符所组成的文件。  
②目录文件。这是由文件目录项所构成的文件。  
③特殊文件。在UNIX类操作系统中，把I／O设备也看成是一种文件-特殊文件。 

## 文件的逻辑结构和物理结构
**设计文件逻辑结构的原则：**易于操作、查找快捷、修改方便、空间紧凑。

**文件的逻辑结构：**文件的逻辑结构就是用户所看到的文件的组织形式。可以按逻辑结构把文件划分成三类：无结构的字符流式文件、定长记录文件和不定长记录文件构成的记录树。定长记录文件和不定长记录文件可以统称为记录式文件。

**文件的物理结构：**  
（1）顺序结构，又称连续结构，这是一种最简单的文件物理结构，它把逻辑上连续的文件信息依次存放在连续编号的物理块中。  
（2）链接结构，文件的链接结构的实质就是为每个文件构造所使用磁盘块的链表。使用这种链接结构的文件，将逻辑上连续的文件分散存储在若干不连续的物理块中。  
（3）索引结构，索引结构的文件把每个物理盘块的指针字，集中存储在称为索引表的数据结构中的内存索引表中。

## 文件目录
**文件控制块的内容：**文件名、文件号、用户名、文件地址、文件长度、文件类型、文件属性、共享计数、文件的建立日期、保存期限、最后修改日期、最后访问日期、口令、文件逻辑结构、文件物理结构，等等。

**文件目录：**在操作系统中，为了管理大量的文件，为每个文件都设置一个描述性数据结构-文件控制块，把所有文件的文件控制块有机地组织起来，就构成了文件控制块的一个有序集合，称为文件目录。
根据实际的需要，一般把文件目录设计成一级（单级）目录结构、二级目录结构和多级目录结构。

**目录项：**当用户建立一个新文件时，与该文件有关的一些信息与属性记录在该文件的文件控制块内。为了便于管理，通常将文件控制块做成定长数据结构的一个记录，存储在目录文件中。而这样的每一个记录称为目录项。

**目录文件：**多个文件的文件控制块集中在一起组成了文件的目录。通常，文件目录以文件的形式保存起来，这个文件就被称为目录文件。目录文件是每项记录长度固定的记录式文件。

为加快目录检索可采用**目录项分解法**，即把目录项分为两部分，符号目录项（次部）和基本目录项（主部）。其中，符号目录项包含文件名以及相应的文件号；而基本目录项包含了除文件名外文件控制块的其他全部信息。

**FAT文件系统总共有三个版本：**FAT-12、FAT-16和FAT-32，取决于用多少二进制位表示磁盘块地址。

## 文件存储空间管理
**磁盘空间的分配回收算法：**  
（1）位示图，该法的基本思想是，利用一串二进制位（bit）的值来反映磁盘空间的分配使用情况。  
（2）空闲块表。空闲块表是专门为空闲块建立的一张表，该表记录外存储器全部空闲的物理块：包括每个空闲块的第一个空闲物理块号和该空闲块中空闲物理块的个数。  
（3）空闲块链表。将外存储器中所有的空闲物理块连成一个链表，用一个空闲块首指针向第一个空闲块，随后的每个空闲块中都含有指向下一个空闲快的指针，最后一块的指针为空，表示链尾，这样就构成了一个空闲块链表。

**空闲块成组链接法：**  
对链接表的一个改进方案是将n个空闲盘块的地址存储在第一个空闲块中。其余n-1个空闲盘块是实际空闲的。假设每100个空闲块为一组。第一组的100个空闲块块号放在第二组的头一块中，而第二组的其余99块是完全空闲的。第二组的100个块号又放在第三组的头一块中，依次类推，组与组之间形成链接关系。在最后一组的块号中第2个单元填“0”，表示该块中指出的块号是最后一组的块号，空闲块链到此结束。在这个空闲块链中，不足100块的一个组的块号，通常放在内存的一个专用块中。这种方式称为成组链接。

## 实现文件系统的表目
当用户申请打开一个文件时，系统要在内存中为该用户保存一些必要的信息，这些信息以表格栏目中内容的形式出现，被称为**表目**。

在内存中所需的重要表目有如下内容：系统打开文件表、用户打开文件表。

## 文件及文件目录的操作
**建立文件的具体步骤如下：**  
（1）检查参数的合法性。文件名是否符合命名规则，若是，则进行下一步（2）；否则报错，返回。  
（2）检查同一目录下有无重名文件。若没有，则进行下一步（3）；否则报错，返回。  
（3）在目录中有无空闲位置。若有，则进行下一步（4）；否则，不成功返回。有的系统可能要为此文件申请数据块空间（申请一部分或一次性全部申请）。  
（4）填写目录项内容。包括文件名、用户名、存取权限、长度置零，首地址等。  
（5）返回。

**指针定位时，系统主要完成的工作：**  
（1）由fd检查用户打开文件表，找到对应的入口。  
（2）将用户打开文件表中文件读写指针位置设为新指针的位置，供后继读写命令存取该指针处文件内容。第七节文件系统的性能。  

**磁盘高速缓存的基本思想：**  
系统在内存中保存一些磁盘块，这些磁盘块在逻辑上属于磁盘，内存的这一区域被称为块高速缓存。运行时，系统检查所有的读请求，看所需的文件块是否在块高速缓存中。如果在，则可直接在内存中进行读操作；否则，首先要启动磁盘，将所需块读到高速缓存中，再复制到其他内存区域。如果内存中的高速缓存已满，则需要按照一定的算法淘汰一些较少使用的磁盘块，让出块高速缓存空间。

## 文件共享、保护和秘密
**文件的共享**是指一个文件可以允许多个用户共同使用。文件共享不仅是完成共同任务所必需，而且还带来许多好处：节省文件所占用的存储空间；免除系统复制文件的工作；减少用户大量重复性劳动；减少实际输入输出文件的次数。此外，利用文件共享可以实现进程间相互通信。

从共享的时间段上看，共享文件的使用有两种情况：文件可以同时使用、文件不允许同时使用。

在文件共享的具体方式上，有三种文件的**共享形式：**  
（1）文件被多个用户使用，由存取权限控制。  
（2）文件被多个程序使用，但分别用自己的读写指针。  
（3）文件被多个程序使用，但共享读写指针。

**常用的文件保密的措施：**
规定文件的使用权限在一定程度上可起到文件保密的作用，但是文件的使用权限可由用户设定或修改，因而单靠规定文件的使用权限不能达到文件保密的目的。
常用的文件保密的措施还有以下几种：  
（1）隐蔽文件目录。  
（2）设置口令。  
（3）使用密码。  
（4）病毒防范。  